package annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 	注解是标记，也可以理解成是一种应用在类，方法，参数，属性，构造器傻瓜的特殊修饰符
 * 	注解作用有以下三种：
 * 	1. 生成文档 常用的有 @param @return
 * 	2. 替代配置文件的作用，尤其是在spring等一些框架中，使用注解可以大量的减少配置文件的数量
 * 	3. 检查代码的格式， 如@override 标识某一个方法是否覆盖了它的父类的方法
 * 
 * 	二. 注解的底层也是使用反射实现的，我们可以自定义一个注解来体会下。注解和接口有点类似，不过申明注解类需要加上@interface
 * 	注解类里面，只支持基本类型，String及枚举类型，里面所有属性被定义成方法，并允许提供默认值。
 * 	java5.0开始 在java.lang.annotations中提供了四种元注解，专门注解其他的注解：
 * 
 * 	@target --注解用于什么地方
 * 	@Retention -- 注解运行状态
 *	@Documented --生成说明文档，添加类的注解
 *	@inherited -- 允许子类继承父类中的主解
 * 
 */
	@Target({ElementType.TYPE})
	@Retention(RetentionPolicy.RUNTIME)
	@Documented
	public @interface User {
		String name() default "张三";
		String nickname() default "zhangsan";
	}
